package com.wmx.Immutable;

/**********************************
 * @author wmx
 * @date 2019/8/27 11:25
 * @description:
 * @version 1.0
 *State of immutable object can not be modified after construction, any modification should result in new immutable object.
    All fields of Immutable class should be final.
    Object must be properly constructed i.e. object reference must not leak during construction process.
    Object should be final in order to restrict sub-class for altering immutability of parent class.

    要写出Immutable类，需要遵循以下几个原则：
    1）immutable对象的状态在创建之后就不能发生改变，任何对它的改变都应该产生一个新的对象。
    2）Immutable类的所有的属性都应该是final的。
    3）对象必须被正确的创建，比如：对象引用在对象创建过程中不能泄露(leak)。
    4）对象应该是final的，以此来限制子类继承父类，以避免子类改变了父类的immutable特性。
    5）如果类中包含mutable类对象，那么返回给客户端的时候，返回该对象的一个拷贝，而不是该对象本身（该条可以归为第一条中的一个特例）
    使用Immutable类的好处：
    1）Immutable对象是线程安全的，可以不用被synchronize就在并发环境中共享
    2）Immutable对象简化了程序开发，因为它无需使用额外的锁机制就可以在线程间共享
    3）Immutable对象提高了程序的性能，因为它减少了synchroinzed的使用
    4）Immutable对象是可以被重复使用的，你可以将它们缓存起来重复使用，就像字符串字面量和整型数字一样。你可以使用静态工厂方法来提供类似于valueOf（）这样的方法，它可以从缓存中返回一个已经存在的Immutable对象，而不是重新创建一个。

     java 的 不可变类：String Integer Long
 *
 *
 ************************************/
public class ImmutableClass {

}
